home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / JFC.bin / MultiLookAndFeel.java < prev    next >
Text File  |  1998-06-30  |  6KB  |  180 lines

  1. /*
  2.  * @(#)MultiLookAndFeel.java    1.17 98/02/02
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20. package com.sun.java.swing.plaf.multi;
  21.  
  22. import java.util.Vector;
  23. import java.io.Serializable;
  24. import java.lang.reflect.Method;
  25. import com.sun.java.swing.*;
  26. import com.sun.java.swing.plaf.*;
  27.  
  28. /**
  29.  * <p>A Multiplexing UI Look and Feel that allows more than one UI 
  30.  * to be associated with a component at the same time. 
  31.  * <p>
  32.  * Warning: serialized objects of this class will not be compatible with
  33.  * future swing releases.  The current serialization support is appropriate
  34.  * for short term storage or RMI between Swing1.0 applications.  It will
  35.  * not be possible to load serialized Swing1.0 objects with future releases
  36.  * of Swing.  The JDK1.2 release of Swing will be the compatibility
  37.  * baseline for the serialized form of Swing objects.
  38.  *
  39.  * @version 1.17 02/02/98
  40.  * @author Willie Walker
  41.  */
  42. public class MultiLookAndFeel extends LookAndFeel 
  43.     implements Serializable {
  44.  
  45. //////////////////////////////
  46. // LookAndFeel methods
  47. //////////////////////////////
  48.  
  49.     public String getName() {
  50.         return "Multiplexing Look and Feel";
  51.     }
  52.     
  53.     public String getID() {
  54.     return "Multiplex";
  55.     }
  56.  
  57.     public String getDescription() {
  58.         return "Allows multiple UI instances per component instance";
  59.     }
  60.  
  61.     public boolean isNativeLookAndFeel() {
  62.     return false;
  63.     }
  64.  
  65.     public boolean isSupportedLookAndFeel() {
  66.     return true;
  67.     }
  68.  
  69.     public UIDefaults getDefaults() {
  70.     UIDefaults table = new UIDefaults();
  71.     String packageName = "com.sun.java.swing.plaf.multi.Multi";
  72.     Object[] uiDefaults = {
  73.            "ButtonUI", packageName + "ButtonUI",
  74.      "CheckBoxMenuItemUI", packageName + "CheckBoxMenuItemUI",
  75.          "CheckBoxUI", packageName + "ToggleButtonUI",
  76.              "ColorChooserUI", packageName + "ColorChooserUI",
  77.          "ComboBoxUI", packageName + "ComboBoxUI",
  78.           "DesktopIconUI", packageName + "DesktopIconUI",
  79.           "DesktopPaneUI", packageName + "DesktopPaneUI",
  80.             "DirectoryPaneUI", packageName + "DirectoryPaneUI",
  81.                "EditorPaneUI", packageName + "TextUI",
  82.               "FileChooserUI", packageName + "FileChooserUI",
  83.         "InternalFrameUI", packageName + "InternalFrameUI",
  84.             "LabelUI", packageName + "LabelUI",
  85.              "ListUI", packageName + "ListUI",
  86.           "MenuBarUI", packageName + "MenuBarUI",
  87.          "MenuItemUI", packageName + "MenuItemUI",
  88.              "MenuUI", packageName + "MenuUI",
  89.            "OptionPaneUI", packageName + "OptionPaneUI",
  90.         "PasswordFieldUI", packageName + "TextUI",
  91.         "PopupMenuUI", packageName + "PopupMenuUI",
  92.           "ProgressBarUI", packageName + "ProgressBarUI",
  93.       "RadioButtonMenuItemUI", packageName + "RadioButtonMenuItemUI",
  94.           "RadioButtonUI", packageName + "ToggleButtonUI",
  95.         "ScrollBarUI", packageName + "ScrollBarUI",
  96.            "ScrollPaneUI", packageName + "ScrollPaneUI",
  97.         "SeparatorUI", packageName + "SeparatorUI",
  98.            "SliderUI", packageName + "SliderUI",
  99.           "SpinnerUI", packageName + "SpinnerUI",
  100.         "SplitPaneUI", packageName + "SplitPaneUI",
  101.            "TabbedPaneUI", packageName + "TabbedPaneUI",
  102.           "TableHeaderUI", packageName + "TableHeaderUI",
  103.             "TableUI", packageName + "TableUI",
  104.          "TextAreaUI", packageName + "TextUI",
  105.         "TextFieldUI", packageName + "TextUI",
  106.          "TextPaneUI", packageName + "TextUI",
  107.          "ToggleButtonUI", packageName + "ToggleButtonUI",
  108.           "ToolBarUI", packageName + "ToolBarUI",
  109.           "ToolTipUI", packageName + "ToolTipUI",
  110.              "TreeUI", packageName + "TreeUI",
  111.     };
  112.  
  113.     table.putDefaults(uiDefaults);
  114.     return table;
  115.     }
  116.  
  117. ///////////////////////////////
  118. // Utility methods for the UI's
  119. ///////////////////////////////
  120.  
  121.     /**
  122.      * Create the real UI's from the default and auxiliary look and feels,
  123.      * placing the results in the uis vector passed in.  
  124.      * @return the ComponentUI for the component.
  125.      */
  126.     public static ComponentUI createUIs(ComponentUI mui,
  127.                         Vector      uis,
  128.                             JComponent  target) {
  129.         ComponentUI ui;
  130.  
  131.         // Make sure we can at least get the default UI
  132.         //
  133.         ui = UIManager.getDefaults().getUI(target);
  134.         if (ui != null) {
  135.             uis.addElement(ui);
  136.             LookAndFeel[] auxiliaryLookAndFeels;
  137.         auxiliaryLookAndFeels = UIManager.getAuxiliaryLookAndFeels();
  138.             if (auxiliaryLookAndFeels != null) {
  139.                 for (int i = 0; i < auxiliaryLookAndFeels.length; i++) {
  140.                     ui = auxiliaryLookAndFeels[i].getDefaults().getUI(target);
  141.                     if (ui != null) {
  142.                         uis.addElement(ui);
  143.                     }
  144.                 }
  145.         }
  146.         } else {
  147.         return null;
  148.     }
  149.  
  150.         // Don't bother returning the multiplexing UI if all we did was
  151.         // get a UI from just the default look and feel.
  152.         //
  153.     if (uis.size() == 1) {
  154.         return (ComponentUI) uis.elementAt(0);
  155.     } else {
  156.         return mui;
  157.     }
  158.     }
  159.  
  160.     /**
  161.      * Turn the Vector of UI's into an array.
  162.      */
  163.     protected static ComponentUI[] uisToArray(Vector uis) {
  164.         if (uis == null) {
  165.             return new ComponentUI[0];
  166.         } else {
  167.             int count = uis.size();
  168.             if (count > 0) {
  169.                 ComponentUI[] u = new ComponentUI[count];
  170.                 for (int i = 0; i < count; i++) {
  171.                     u[i] = (ComponentUI)uis.elementAt(i);
  172.                 }
  173.                 return u;
  174.             } else {
  175.                 return null;
  176.             }
  177.         }
  178.     }
  179. }
  180.